package cn.jwtool.jwcache.buffer.data;

import java.util.Map;
import java.util.Set;

/**
 * @author : willian fu
 * @version : 1.0
 */
public interface CatchTemplate{


    /**
     * 从数据中获取一个值
     * @param clazz key对应的value类型
     * @param <T> class对象
     * @return value
     */
    <T> T getForClass(String key, Class<T> clazz);

    /**
     * 删除键
     * @param key 键
     * @param type 类型 true=主动删除 false=过期自动删除
     * @return 被删除的键的值
     */
    Object deleteKey(String key, boolean type);

    /**
     * 获取剩余时长
     * @param key 键
     * @return 剩余时长
     */
    Long getExpired(String key);

    /**
     * 添加一个value
     * @param key 键
     * @param value 值
     * @param time 有效时间
     */
    void setValue(String key, Object value, Long time);

    /**
     * 更新key的过期时间
     * @param key 键
     * @param time 值
     */
    Long updateExpired(String key, Long time);

    /**
     * 获取所有key
     * @return key集合
     */
    Set<String> getKeys();

    /**
     * 模糊查询key,前缀模糊和后缀模糊
     * @param rule **xxx xxx** **xxx**
     * @return 符合条件的key集合
     */
    Set<String> getKeys(String rule);

    /**
     * 写AFO日志，持久化数据
     * @param command 命令
     * @param params 参数
     */
    void writeAFOLog(String command, Object params);

    /**
     * 获取当前key数量
     * @return key数量
     */
    int getSize();

}
